Symbolic execution is a technique for dynamically analyzing a software program. Symbolic execution uses as input values symbolic values instead of actual data and represents values of program variables as symbolic expressions. As a result, the outputs computed by a software program that is symbolically executed are expressed as a function of the symbolic inputs. Through symbolic execution, each path within a software program may be symbolically executed. Whenever symbolic execution along a path terminates (normally or with an error), a path constraint associated with the path is solved and the solution forms concrete test inputs, which may be used to execute the software program.
While symbolic execution provides good test coverage and generates test cases that may cover a majority of or all paths within a software program, symbolic execution may be time consuming and resource intensive. Additionally, a software program is typically analyzed to verify the functionality of the software program after a programmer has completed writing all the modules and functions of the software program so that the entire software program may be parsed and compiled. The software program may be analyzed by parsing and compiling the entire software program followed by dynamic analysis of the software program to identify errors within the software program. A user may have to wait for the dynamic analysis of the software program before being able to evaluate and fix the errors. Using symbolic execution to analyze the completed software program may increase the time to analyze a software program, thereby further increasing an already long development cycle of the software program.
The subject matter claimed herein is not limited to embodiments that solve any disadvantages or that operate only in environments such as those described above. Rather, this background is only provided to illustrate one example technology area where some embodiments described herein may be practiced.